iT邦幫忙

2024 iThome 鐵人賽

DAY 25
0
Mobile Development

用Flutter Flame做遊戲!Live!系列 第 27

關於Vector2和「往特定方向移動」「往特定座標移動」

  • 分享至 

  • xImage
  •  

這是可以同時用在表達座標與向量計算的工具。
因為它的建構子就是一組XY值,同時還提供兩個Vector2做加減的各種方法。(不需要針對XY值個別計算。)
如果第一組Vector2是座標,第二組Vector2是座標的變動量,兩組相加後就會得到一個新座標;如果第一組Vector2是物體運動的動能向量,第二組Vector2是動能向量接收到的變動量,兩組相加後就會得到一個新的物體運動的動能向量。
甚至還可以做乘除。如果要計算兩個點的中間點,則是「兩個點Vector2相加後除以二」。


因為可以產生「向量」,所以Vector2也是用來產生物體穩定移動速度與方向的方法。

隨便在螢幕上點一下,知道座標後順便知道它跟特定目標之間的距離,並不是什麼難事。但要確保特定目標往這個座標移動時的速度是穩定的,那就是另外一回事了。

在Flutter中,Vector2有「length」屬性,可以表達「兩個點之間的距離」或「一股向量的大小」。
如果「一股向量的大小」為X,則直接將Vector2除以X,就會得到一個「不論方向為何、大小都穩定的移動向量」。
這當然不是「唯一解」,這件事情在Vector2中做法很多,例如知道方向後,就可以知道角度,這時候將決定好固定大小的速度Vector2轉動角度,一樣可以得到等量的移動向量。

總之,有了Vector2後,「物體移動」這件事就變得容易、且做法也通用好懂。
(但路徑就是另外一件事了!)


會討論這些,是因為發現「MouseJoint」並不適合用來作為實現「點擊任意位置作為物體移動的目標」的技術。
因為設定了「MouseJoint」後,物件會在點擊的目標點上「擺盪」,就跟被橡皮筋牽動一樣。

所以要實現「點擊任意位置作為物體移動的目標」,還是要取得一個穩定向量,然後將物體的座標Vector2持續「加」上穩定的向量,直到物體的座標與目標的座標之間的距離小於向量的大小為止。

(因為該死的鐵人賽規則,這篇文章就這樣發出去了。昨天的文還有好多內容要修正。)


上一篇
週末,罷工一下....MouseJoint的垃圾官方範例...
下一篇
正三角形、菱形、正六面體...
系列文
用Flutter Flame做遊戲!Live!32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言